package Date.TimeDay08;

import java.math.BigDecimal;
import java.math.RoundingMode;

import org.junit.Test;

/**
 * 用于演示BigDecimal
 * 1.用法同BigInteger
 * 2.除法
 * 		2.1取小数位：divide(divisor, scale, roundingMode); // divisor:除数   scale:小数位   roundingMode:四舍五入等
 * 		2.2除法报错误的问题：做除法时，除不尽会报错；解决办法：设置小数位
 * 3.保留小数位：setScale(scale, roundingMode); //scale:小数位  roundingMode:进位方式
 * 
 * @author Administrator
 *
 */
public class BigDecimalDemo {
	
	/**
	 * 如何构建BigDecimal
	 */
	@Test
	public void demo1() {
		
		// 直接new的形式
		BigDecimal b1 = new BigDecimal("1.5");
		
		// valueOf的形式
		BigDecimal b2 = BigDecimal.valueOf(10000);
	}
	
	/**
	 * 演示常用方法
	 */
	@Test
	public void demo2() {
		BigDecimal b1 = new BigDecimal(1);
		BigDecimal b2 = new BigDecimal(8);
		
		// 加
		BigDecimal b3 = b1.add(b2);
		
		// 减
		BigDecimal b4 = b1.subtract(b2);
		
		// 乘法
		BigDecimal b5 = b1.multiply(b2);
		
		// 除法
		BigDecimal b6 = b1.divide(b2);
		System.out.println(b6);
		BigDecimal b7 = b1.divide(b2, 2, RoundingMode.HALF_UP); // divisor:除数   scale:小数位   roundingMode:四舍五入等
		System.out.println(b7);
		
		// 除法异常的问题
		BigDecimal big1 = new BigDecimal(1);
		BigDecimal big2 = new BigDecimal(3);
//		BigDecimal big3 = big1.divide(big2);
//		System.out.println(big3);
		
		// 解决除法异常，给其规定小数位
		BigDecimal big4 = big1.divide(big2, 2, RoundingMode.HALF_UP);
		System.out.println(big4);
		
		// 格式化小数位
		BigDecimal bigDecimal = new BigDecimal(0.11115555);
		BigDecimal bigDecimal2 = bigDecimal.setScale(4, RoundingMode.HALF_UP); // newScale:新的小数位   roundingMode:进位的问题
		System.out.println(bigDecimal2);
	}
	
	/**
	 * 将BigDecimal转换成基本类型
	 */
	@Test
	public void demo3() {
		
		BigDecimal bigDecimal = BigDecimal.valueOf(200000000000L);
		int i = bigDecimal.intValue();
		System.out.println(i);
		int i2 = bigDecimal.intValueExact(); // 安全转换
		System.out.println(i2);
		
	}
	 
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
